package me.atam.atam4j;
import io.dropwizard.jersey.setup.JerseyEnvironment;
import me.atam.atam4j.dummytests.PassingTestWithNoCategory;
import me.atam.atam4j.resources.TestStatusResource;
import me.atam.atam4jdomain.TestsRunResult;
import org.hamcrest.CoreMatchers;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
public class Atam4jIntegrationTest {
@Test
public void givenHealthCheckManagerWithPassingTest_whenInitialized_thenTestsAreHealthy() throws Exception{
JerseyEnvironment jerseyEnvironment = mock(JerseyEnvironment.class);
ArgumentCaptor<TestStatusResource> argumentCaptor = ArgumentCaptor.forClass(TestStatusResource.class);
new Atam4j.Atam4jBuilder(jerseyEnvironment)
.withTestClasses(PassingTestWithNoCategory.class)
.withInitialDelay(0)
.build()
.initialise();
verify(jerseyEnvironment).register(argumentCaptor.capture());
TestStatusResource value = argumentCaptor.getValue();
assertNotNull(value);
checkThatWeEventuallyGetSuccess(value);
}
@Test
public void givenHealthCheckManagerUsingAnnotationScanning_whenInitialized_thenTestsAreHealthy() throws Exception{
JerseyEnvironment jerseyEnvironment = mock(JerseyEnvironment.class);
ArgumentCaptor<TestStatusResource> argumentCaptor = ArgumentCaptor.forClass(TestStatusResource.class);
new Atam4j.Atam4jBuilder(jerseyEnvironment)
.withInitialDelay(0)
.build()
.initialise();
verify(jerseyEnvironment).register(argumentCaptor.capture());
TestStatusResource value = argumentCaptor.getValue();
assertNotNull(value);
checkThatWeEventuallyGetSuccess(value);
}
private void checkThatWeEventuallyGetSuccess(TestStatusResource resource) {
PollingPredicate<TestsRunResult> resultPollingPredicate = new PollingPredicate<>(UnitTestTimeouts.MAX_ATTEMPTS, UnitTestTimeouts.RETRY_POLL_INTERVAL_IN_MILLIS,
testsRunResult -> testsRunResult.getStatus().equals(TestsRunResult.Status.ALL_OK),
() -> (TestsRunResult) resource.getTestStatus().getEntity());
assertThat(resultPollingPredicate.pollUntilPassedOrMaxAttemptsExceeded(), CoreMatchers.is(true));
}
}